package com.atkid.boot;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;

public class CodeGenerator {
	@Test
	public void generate() {
		// 代码生成器
		AutoGenerator mpg = new AutoGenerator();

		// 全局配置
		GlobalConfig gc = new GlobalConfig();
		String projectPath = "D:\\Java\\club_registration_system";   // 设置当前工程路径
		gc.setOutputDir(projectPath + "\\src\\main\\java"); // 设置代码自动生成路径
		gc.setAuthor("kid");
		gc.setServiceName("%sService");                     // 去掉Service接口的首字母I
		gc.setIdType(IdType.ASSIGN_ID);                     // 主键策略3.3.0之后
		gc.setFileOverride(false);                          // 重新生成文件时，是否覆盖
		gc.setDateType(DateType.ONLY_DATE);                 // 使用默认时间类型
		// gc.setOpen(false);                                // 生成完成之后是否展开文件夹
		//gc.setSwagger2(true);                             // 使用Swagger2
		mpg.setGlobalConfig(gc);

		// 数据源配置（代码生成器所读取的数据库数据源）
		DataSourceConfig dsc = new DataSourceConfig();
		dsc.setUrl("jdbc:mysql://localhost:3306/club_db?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true");
		dsc.setDriverName("com.mysql.cj.jdbc.Driver");
		dsc.setUsername("cwk");
		dsc.setPassword("chenwenkang");
		mpg.setDataSource(dsc);

		// 包配置
		PackageConfig pc = new PackageConfig();
		pc.setEntity("entity");
		pc.setMapper("mapper");
		pc.setService("service");
		pc.setServiceImpl("serviceImpl");
		pc.setController("controller");
		pc.setParent("com.atkid");   // 设置包名
		pc.setModuleName("boot");       // 设置当前模块名
		mpg.setPackageInfo(pc);

		// 策略配置
		StrategyConfig strategy = new StrategyConfig();
		strategy.setInclude("student","club","manager");                        // 设置需要生成的表
		strategy.setNaming(NamingStrategy.underline_to_camel);        // 设置表与类之间的名称映射方案
		strategy.setColumnNaming(NamingStrategy.underline_to_camel);  // 设置列名与属性名之间的名称映射方案
		strategy.setRestControllerStyle(true);                        // 使用RestController
		//strategy.setControllerMappingHyphenStyle(true);               // Controller驼峰映射转换为-连接
		strategy.setEntityLombokModel(true);                          // 使用lombok处理实体类
		strategy.setChainModel(true);                                 // 实体类使用链式set方法
		//strategy.setTablePrefix(pc.getModuleName() + "_");          // 表名去除指定前缀
		mpg.setStrategy(strategy);
		mpg.execute();
	}
}
